		   shell (UNIX)
		       ( )

() . 

			 1. 

           Unix.
         ,      Unix  
          .  UNIX  -  
            .
(  UNIX   AT&T - 
    :  SCO  UNIX,  BSDI,  Solaris, Linux,
DG/UX, AIX  ..).
           ,     
.      
     X Window      
TCP/IP  ..
      Unix         Bell
Laborotories  (AT&T).    Unix/v7 ( 7)
    79  - 80- .   Unix  1983 
      .      
          (computer
science) .   .
              
    UNIX!

       Unix        :  ,  ,
  .       X Window 
 TCP/IP.
       ,        , 
  ,         :
  ,   if, for, while  ..,  
   -    ,        
:       ,      ()
,         
..

		     2.  

          Unix   ()
.      ( 
 - , ),   . 
              , 
  ,      ,  
  -.

			  /
			  |
   -----------------------------------------------------------
  |     |     |    |    |    |    |                 |    |     |
bin    boot  dev  etc  lib  mnt  sys    .   .   .  tmp  unix  usr


     K    "/".    :

     bin -    ;
     usr  -        ,   ,
    ;
     dev  -      ,   
(, ...);
     etc -     ;
     lib -  ;
     mnt  -      ()    
;
     sys -     ;
     tmp -    ;
     usr  -        ,   ,
    .

   () :
     unix - ;
     boot - .

        : /bin, /usr, ..., /unix, /boot.

                    
   .  ,    "usr",    ,
 :
     bin -   ;
     games - ;
     include -    ;
     lib -   .
    :

     /usr/bin   /usr/games   /usr/include   /usr/lib

           "/usr/include"    "sys",
      ,   "conf",   
 "conf" 

     /usr/include/sys/conf

               ,  
   ("/").
               "/",    
   .  (?)  
     /usr  ,   
       

	 include/sys/conf

           :
     .   -   ""    
     ..  -   ""   (.. ,
        ).
                 
      ,   . 
      ,      
     . (
           -  
        , 
    shell   ).
                14- 
(        
),        
- ,  256 .
                      -
    .       
     ,   "." 
   -.
     .     UNIX     
  ,    "FILE",  "file"    "File"  -    
 !

       .        
        ,  , 
     (    
).      (  )
  ()      
mount  (       ),  
       ,  
     ,    
  (..  "A:").

         Unix - shell   . 
    ,     
   .
     ,    

	    ls -l /usr

      ls -  ; -l - ,   ,  
      ; /usr - ,  
echo.    

    drwxrwxr-x  2  root  2048  nov 3  12:11  bin
    -rwxr--r--  1  root   861  may 11 20:11  boot
    drwxrwxr-x  2  root  1024  jan 9  11:55  dev
    drwxrwxr-x  1  root  4096  may 11 20:11  dos
    drw-r--r--  3  root  4096  nov 17 12:01  include
    drwxr-xr-x  7  root  480   nov 17 12:30  lib

         ,    (d-directory), 
  "rwx"   : r - , w -
      -  ( ,     w
            
,         );  , 
    ,          .
          ,
        (  
 , ..   ).
     ,  2  -       (.. -  
      ,        );  root  -  
,  2048  -     , nov 3 12:11 -  
            (3   
12-11); bin -   ( ).
                  (boot),
     .

        "pwd"   (         )   
        .    
    .
             
    .  ,  ,      
"/usr".
          "cd <>". 
    /usr/include/sys,  

	cd  /usr/include/sys

    , 

	cd  include/sys

   .
             -  
 "/"  .
       "cd  .."         
.        "/usr/include/sys"           
"/usr/include",      "cd" (..  ) 
       (.. , 
      ).

           

     mkdir <  >

         "mkdir  err new"     
     "err"  "new".
         (    )      
 

     rmdir <  >

         

     rm <  >

                
   -           "ed"  
    "red" (   "vi"  "", 
  "").
         Unix    200      - 
,      , 
          
 .

     

     rm -1

  "-1".

    

    rmdir -1

         "-1",   ,  
(..   ).

     

     mv - -

  .

     

     cp - -

   (  ).

       

     chmod 755 

              "",      
,    ,    ""     
  .      
         
(rwx  -  ,  ,  ).     , 
        
  ,          (7:111 - rwx). 
                  
,       (55:101101 - r-xr-x).


		  3.   SHELL

         shell  (    -  , )
        . 
          .
,           
  (  -   
  ).    ,    (shell)   
            .  
    ("$").
     Shell            
  (           POSIX [POSIX
1003.2]   -        ).  ,  
    cshell,   kshell, bashell
(      )  .  ,
           . 
        
  .
       .  shell -      UNIX.
        () "shell" 
  "sh"  -      "shell".   "shell"
            
 .        
,           "shell",   
   .
      ,       "f1":

     echo Hello!

               ,  
"echo",         
.        "f1"     
"chmod  755  f1".    ,    (!)
"sh" ("shell"):

     sh f1



     sh < f1

                "shell". 
    "." (), ..

     . f1

        .          
  "#",      .  
,          C-Shell ("csh") 
        "csh",     
.  "csh".
     .      sh-       
  ":".
       UNIX  -   ,  
      , , 
12-    (         ALT/
),          (    )
    .    
 X-Window     ,    
        ...
        shell  .


		  3.1.  

       shell    :

     < > <> <()>

     :

     ls  -ls  /usr/bin

      ls -     ,
     -ls  -  ( "-" -  , l -  , s -
'   ).
     /usr/bin -  ,    .
                 
  /usr/bin,            
   .
      ,      
.        ,   
      .            
.        ,      ,
    "" ,  , tar, dd, find  
.
           (      ),         (..
      ,      
)  shell ,    .     


     cat cat

                shell,     
(),              "cat"
( ),    .


		   3.2.  .

 :
     ;      <   >   -    
 ;
     & -  ()   ;
     &&  -      
 ,  ;
     ||   -           
 ,  .

             ( 
      )          ,
    ,    ,  
 ,      .
     ,    ()   "find"  
          ,     "/",  
  "conf",      "pwd"   .   
    :

--------------------------------
| $ find / -name conf -print & |   "find"
|                              |
| 288                          |  (PID)  
|                              |
| $ pwd                        |   "pwd"
|                              |
| /mnt/lab/asu                 |   "pwd"
|                              |
| $                            |  shell  
|                              |
| /usr/include/sys/conf        |   "find"
|                              |
--------------------------------

       ,      ,
       - .   
    "wait  [PID]".     
     ()    .  
    ,           
,    "sh".

             
"{}"      "()"  .    ,  
  :

        

     k1 && k2; k3

       k1, k2  k3 - - ,  "k2"  
        "k1";     
  "k2" (.. "k2"  ,  ) 
 "k3".

     k1 && {k2; k3}

          ("k2"  "k3")    
  "k1".

     {k1; k2} &

           
"k1"  "k2".

           (         )  
,        "CTL/C"  
        .      
      .     
    ,     ()
    (PID).       ,
    ,   

	ps -aux

              (PID),
  ,    ,   , 
..
                     ,
   ,      "849"    "866".  


	kill -9  866 849

           .    
       ,   
      (        
).

     .             
      (,  
          ),    
      ,   () 
  .      
,               
 .

         "()",    ,
            
shell.
           "/mnt/lab/asu"
        

     cd ..; ls; ls

         "ls"  2   
"/mnt/lab",  
     (cd ..; ls) ls
             "/mnt/lab",    
  "/mnt/lab/asu",  ..       
     shell,          
.         
shell    .


		   3.3.  

       () - "stdin"   UNIX  
  ,        () - "stdout"
     .     
    - "stderr",     
.
     ,            
,  .
            
          ().    ">"    ">>"
  .

	ls >f1

       "ls"        
    "f1" (   ).   "f1"
  ,     .

     pwd >>f1

       pwd            
     "f1", .. ">>"   , 
 .
      "<"  "<<"   .

     wc -l <f1

         f1.

     ed f2 <<!

                         "f2",
    .       
,      "<<"  (.  "!").     
,       "!".
       . 

    wc -l <f3 >f4      wc -l >f4 <f3

      :     "f3"
     "f4".
     ,         
    ,    
  "|".

     ls  | wc -l

                 
 "wc",       .
         '    ,  
,      - :

     cat f1 | grep -h result | sort | cat -b > f2

            "f1" ("cat")   ,
      "result"   ("grep"),     ("sort")
  ,        ("cat  -b")  
   "f2".
             UNIX  
,      . 
        "/dev".  ,  "lp" - ;
"console"  -  ; "ttyi" - i- ; "null" - 
()  ().
     ,  ,

     ls > /dev/lp

            , 

     f1 < /dev/null     "f1".

     sort f1 | tee /dev/lp | tail -20

                "f1"   
,  20       .

          .   
:  0  -  stdin,  1  -  stdout    2  -  stderr.   
            ,    
             ( 
"",            "  "  -
/dev/null).    

     cat f1 f2

              
 "f1"  "f2",  , , 

    111111 222222

    cat: f2: No such file or directory

 111111 222222 -   "f1",   "f2" ,
   "cat"      ,
 ,    ,  .
             ,  
    :

     cat f1 f2 2>f-err

              (  
  "2>")      "f-err".  ,    
          "ff",   
 

     cat f1 f2 >>ff 2>ff

                     
,               
.

     cat f1 f2 2>>ff 1>&2

            "stderr"      (   
)          "ff",            
    "stderr",      
 "ff".      .
      "1>&2" - ,    
,    ,     "&";
    .
     <&-   -   .
     >&-   -   .


	  3.4.   .

         :
     *   -     (  )  
;
     ? -   ;
     [...] -   ,    
/   ;

     cat f* -    ,   "f";
     cat *f* -   ,  "f";
     cat   program.?   -              
 ,  "program.c"  "program.o", 
  "program.com";
     cat  [a-d]*  -   ,    "a", "b",
"c", "d".      "cat [abcd]*" 
"cat [bdac]*".


		  3.5.  .

       ,        
,   .
                    "cmd",
    :

     date; pwd; ls

         shell    (!),  "sh", 
     "cmd",       
, ..

      $  sh cmd         $ sh <cmd

                
,    ,    .
             
-          ,  ..   
,      .   
   .
     ,

     chmod  711 cmd

        "rwx__x__x".   

     cmd

           .
        ,    

     date; pwd; ls

  :

	  date
	  pwd
	  ls

             
  .
       ,         
,        ,   ,
      shell.       
   shell-
         ,    shell-,   
            UNIX,        
.


	      4.  SHELL (  )

         shell          
 "chmod"   .      
     UNIX.


		 4.1. shell-

         shell-   -            
 ,   .
       shell-  -   .
     ,      shell     :   
  ,      ,    
        ,       
    ,    , 
          ,  
          
.
               ,      
,     " " shell,   
        ,     , ,  
,           ,
   . (    " ").

              
,  ..      ,
  ,     .
             
  "=".

     var_1=13 - "13" -   ,     .
     var_2=" UNIX" -    (" ") ,
		            .

     :    , ,  ,   
         
"=".  ,       ,    
           ,   
  .                
          ()
 "=".
                         
shell-.   ,

     DAT=`date`

         ,        "date"
(         ,        
     ),    ,
        ,    
 ,    "DAT".
                 
"read",               
()    .   "read" 
       "echo",  
  -   . :

     echo -n "  :"
     read x

               ,  
   

       :

                
.      ,  ,  "753"        
  "x".
         "read"     () 
   .    "read" ,
     ( ),   
.        ,      
 "read",   .

     .       
        <Enter>.   
          ,      
(!).      ,   .  
           
        <Enter>,     
.  (      
 ).

           shell-    
  "$".  

     echo $var_2
     echo var_2

  

      UNIX
     var_2

        .   :

     echo "var_2 = $var_2"

  

     var_2 =  UNIX

         "echo"   "var_2" -  
,       ("$var_2")  -      
.
              
  ,          
,      ,            
,            .  ,  
    ,      
.   ,  ,  w=    
   "w"      .          
 ,  w="".

       ,           ,
   ,   .
       a=/mnt/lab/asu/



     cat /mnt/lab/asu/prim



     cat ${a}prim

       (..  "cat"      
  ).
         ,         
"prim"  "prim=dir" ,  

     echo ${a}$prim

  

     /mnt/lab/asu/dir


		  4.2. 

         , 
  shell.        
 (" "),   (' ')  - (\).
         :
                c.

     x=22 y=33 z=$x
     A="$x" B='$x' C=\$x
     D="$x + $y + $z"  E='$x + $y + $z'  F=$x\ +\ $y\ +\ $z

     ( G=$x + $y     - )

     

     echo A = $A   B = $B   C = $C
     echo D = $D   E = $E   F = $F
     eval echo evaluated A = $A
     eval echo evaluated B = $B
     eval echo evaluated C = $C

       

     A = 22 B = $x C = $x
     D = 22 + 33 + 22 E = $x + $y + $z F = 22 + 33 + 22
     evaluated A = 22
     evaluated B = 22
     evaluated C = 22

     .      
   "eval"   (   evaluate   -   ),     
      (   )   
    (    ).    
 "A"  ,  "A"   "22".
   "B"  "C"   "$x".   ,
    "eval" - evaluated "B"  "C" 
 "22".
         "eval".
     

     w=\$v v=\$u u=5

        

	       echo $w
	  eval echo $w
     eval eval echo $w

        

     $v
     $u
     5

         ,     
.      "string"   ""
2x3:

abc
def

       ,          
         
:

string="abc
def"

       "echo"

echo  $string
echo '$string'
echo "$string"

    :

abc def

$string

abc
def

  

echo " 
 " > f1

echo ' 
 ' > f2

cat f1 f2

     f1  f2:

 
 
 
 

        ,    -  (\)      
     ,    
      ,    ( 
        -  \\),     -
 '    (  ).
    ,     :

     cat f1 | grep -h result | sort | cat -b > f2

     , , 

     cat f1 | grep -h  \
     result | sort | cat -b > f2

     ,        
   .                
 , :

     cat f1         |
     grep -h result |
     sort           |
     cat -b > f2


	       4.3.   shell-

           ,    shell-      
    , . "35" -   ,   
      "3"      "5",             
 , ,   .
                      "expr".
        :
       :

     x=7 y=2
     a=`expr $x + $y`   ; echo a=$a
     a=`expr $a + 1`    ; echo a=$a
     b=`expr $y - $x`   ; echo b=$b
     c=`expr $x '*' $y` ; echo c=$c
     d=`expr $x / $y`   ; echo d=$d
     e=`expr $x % $y`   ; echo e=$e

  

     a=9
     a=10
     b=-5
     c=14
     d=3
     e=1

     .     ("*")   
,   shell   , 
,  ,        
  .
               ,
    .

           "expr"        ()
 ,   :

     A=`expr 'cocktail' : 'cock'`  ; echo $A
     B=`expr 'cocktail' : 'tail'`  ; echo $B
     C=`expr 'cocktail' : 'cook'`  ; echo $C
     D=`expr 'cock' : 'cocktail'`  ; echo $D

                 ,     
      ( ).    
    :

     4
     0
     0
     0

      ,    .
      ,  "", "y", "z",  ,  
  
     ${x-new} -    "x"   "new",
     ${y=new} -    ""   "new",
     ${z?new} -    "z"   "z: new" 
  .
          ,      
,      .
            ,   "v" 
- , 
     ${z+new}  -       "z"   "new", 
    ,   .


		    4.4.  

         UNIX     .  
,            -  
().
     ,       " <Enter>" 
    "".      ""   
. ,  ""   "1"  "2", 
   .
           -   
.  ,       ""  
,             (
       ).  ""
    ;       "1" 
"2".
              ,      
,  ..       ( 
  -        ).   ,   
      ,    
.      "export".

     .
       ( ) "p",  :

     #  p
     echo  p
     varX=0 varY=1
     echo varX=$varX varY=$varY
     export varY
     p1  #   p1
     p2  #   p2
     echo   p: varX=$varX varY=$varY

        "p1"  "p2",  :

     #  p1
     echo  p1
     echo varX=$varX varY=$varY
     varX=a varY=b
     echo varX=$varX varY=$varY
     export varX

     #  p2
     echo  p2
     echo varX=$varX varY=$varY
     varX=A varY=B
     echo varX=$varX varY=$varY
     export varY

          :

      p
     varX=0 varY=1
      p1
     varX= varY=1
     varX=a varY=b
      p2
     varX= varY=1
     varX=A varY=B
       p: varX=0 varY=1

         ,      
      (   ""  "").
     "set"   "-a".
              ,        
                 ""
  ()    .


		4.5. 

                .  shell
    (..  
  ).         
  (  shell-)     
"$",        0  9:

         "examp-1"      "cock" 
"tail".            
  "1"  "2".  ()    "0" 
   .
                 
 "$" (     ):
     $0 -     ;
     $1 -    ;
     $2 -    ..

          "examp-1"  

      echo   $0:
      sort $2 >> $1
      cat $1

       "cock"  "tail"  

cock:
        :

tail:
      1
      3
      2

        

      examp-1 cock tail

  

       examp-1:
       :
     1
     2
     3

         ,      
,      ,  ..  9-  ("0",   
      ),     
    "shift".
         .

        "many"   13- 

     many 10 20 30 40 50 60 70 80 90 100 110 120 130

       


     ###
     # many:    .
     echo "$0:  "
     echo "    = $#
      : $1 $5 $9 "
     shift
     echo "1 : =$1 =$5 =$9"
     shift 2
     echo "1 + 2 = 3 : =$1 =$5 =$9"
     perem=`expr $1 + $2 + $3`
     echo $perem

               "shift"  
       $1,   
  $2,  ...    ,    ,
  $9.     !
           :

     many:  
        = 13
      : 10 50 90
     1 : =20 =60 =100
     1 + 2 = 3 : =40 =80 =120
     150

           "set".
     ,  

     set a b 
     echo =$1 =$2 =$3

       

     =a =b =c

     ..    "set"    . 
    .  ,   "date"   
  ,  , "Mon May 01 12:15:10 2000",   
 , 

      set `date`
      echo $1 $3 $5

        

      Mon 01 2000

        "set"           
 , :
     set -v -    ,  shell.
     set +v -   .
     set -x -      .
     set +x -   .
       "set"       
  ( ).

	       4.6.  shell-

            
,           ,  shell  
  :
     1.      .       ,
      ,        
.
     2.         .  
,   "$",   
  .
     3.       .      
.
     4.   .      
   ("*", "?","[]")         
.


		  4.7.  

         ,    . shell
    .
           "set"  ,   
       , 
        (        
  "  "),      ,   
  .
             
   ,   UNIX   
 .
        ,     "set":

     HOME=/home/sae
     PATH=/usr/local/bin:/usr/bin:/bin:.:/usr/bin/X11:
     IFS=

     LOGNAME=sae
     MAIL=/var/spool/mail/sae
     PWD=/home/sae/STUDY/SHELL
     PS1=${PWD}:" "
     PS2=>
     SHELL=/bin/bash
     TERM=linux
     TERMCAP=console|con80x25|dumb|linux:li#25:co#80::
     UID=501
     perem=stroka
     x=5

         .

     HOME=/home/sae  -       ,  
  (      )       
.    ,        ,   
 "/home/sae".

     PATH=/bin:/usr/bin:.:/usr/local/bin:/usr/bin/X11    -    
        (), 
 "shell"   .   
  .      
        .     
          .    
          ,
   "echo",  "cd",  "pwd",  "date".      
     "/bin",        
 "sh", "cp", "mv", "ls"  ..   "/usr/bin"
    "cat",  "",  "expr",  "nroff",  "man"    
.          (".", 
  - "", ..""),    
   ().
                <Enter> "shell"
(        )    ,
          ,
      .            
  -     .   
       ,        ,  
  ,  .
     ,    ,   , ,
      .  (,  
   ""    ).

     IFS=   - (  )  ,
         ().  
"",  ""  " ",    
       .

     LOGNAME=sae  -   ("" ).

     MAIL=/var/spool/mail/sae  -    ,   
() .

     PWD=/home/sae/STUDY/SHELL  -   

     PS1=${PWD}:" "   -  .     
         . 
   "/home/sae/STUDY/SHELL: ".

     PS2=>   -         (  ">")    
             (      )
  . ,    "("
      <Enter>          
.        ,      , 
  ")" -   .

     SHELL=/bin/bash -    , 
   .            
()  shell  ("sh"),    ""   - "bash",
    (Bourne-Again SHell).

     TERM=linux -   .

     TERMCAP=console|con80x25|dumb|linux:li#25:co#80::          -
(TERMinal  CAPacity)  ( )   
 .

     UID=501       -    ( - "501").

     perem=stroka
     x=5          - ,   .

               
     "/etc/rc"  "/etc/.profile".
       .          
(,    ,  ,  , 
    ..) ,      
                    ".profile"
(${HOME}/.profile),     . 
            ,  ).
                    
      .  
             
( ).
           ".profile",    
      .   
            ,      
(      )  "."  
 , ..

     . .profile

           ,      ,  
,     . ,     
   "ls" -      
"-a". ,      "rm *".

            "my"    ,
  ".profile", 

     PATH=${PATH}:/home/sae/my



     PATH=${PATH}:${HOME}/my

        ,         
. ,

     export TERM PATH REDKEYS MAIL

            ".profile"  
,  
      stty -lcase
    "   ";  
      cat 
             ,     
  ""            
 .


         shell   
  ():
     ?  - ,   ;
     $  -  ;
     !  -   ;
     #  -   ,   shell;
     *  -  ,   ;
     @  -  ,   ;
     -  - ,   shell.
           (.    
  - shell-)    "$".
     .  

     specific par1 par2 par3

      

     ###
     # specific:   ()

     echo $0 -  
     echo $? -  
     echo $$ -   
     echo $! -    
     echo
     echo $* -  ,  
     echo $@ -  ,  
     echo
     set -au
     echo $- -   

       

     specific -  
     0 -  
     499 -   
     98 -    

     par1 par2 par3 -  ,  
     par1 par2 par3 -  ,  

     au -   


       "0"    .
                      
     "$$",      
 ,   .   ,
 ,     ,
      -. , 
      ,   , 
          (   
  ).       
     . ,   
  .  ,       
 " ", ..,   ,  $$,  
        .    
   .
     "echo"     .
       $*   $@   ,    
    

     "par1  par2  par3"

  

     "par1" "par2" "par3"

     ,   "$*"  "$@"  
    "for".
                  "set"  
  ("a" -    ;
"u"  -     ),    
  "$-".


		  5.   

              shell
    .     "#". ,
      (  )   ,
   . ,

     #  .
     ##  .
     ###   .

                
shell      .         
    .    
    ,      
 .


		 5.1.  test ("[ ]")

       test        . 
    ()    
    shell.

        :

     test 

     [  ]

            , ..  ,
     "test",   
 ,     .
           shell         
    "[",    (!),  
"test".            ,         
  :    
      .
              
    (,  ,       "expr").   
     .
      shell    "".

       :
     -f file -  "file"   ;
     -d file -  "file" - ;
     - file -  "file" -  ;
     -r file -      "file";
     -w file -       "file";
     -s file -  "file"  .

     .        
    (    "0"),        -
 (  "1"). "specific" -  
.

     [ -f specific ] ; echo $?
     0

     [ -d specific ] ; echo $?
     1

       :
     str1 = str2  -  "str1"  "str2" ;
     str1 != str2  -  "str1"  "str2"  ;
     -n str1  -  "str1"  ();
     -z str1   "str1"   ().

     .

     x="who is who"; export x; [ "who is who" = "$x" ]; echo $?
     0

     x=abc ; export x ; [ abc = "$x" ] ; echo $?
     0

     x=abc ; export x ; [ -n "$x" ] ; echo $?
     0

     x="" ; export x ; [ -n "$x" ] ; echo $?
     1

       .    "test"     ""
(..    "0")       
.

      [ privet ] ; echo $?
      0

      [ ] ; echo $?
      1

       ,        ,
       (   
).

      true ; echo $?
      0

      false ; echo $?
      1

        :
     x -eq y   - "x"  "y",
     x -ne y   - "x"  "y",
     x -gt y   - "x"  "y",
     x -ge y   - "x"    "y",
     x -lt y   - "x"  "y",
     x -le y   - "x"    "y".

             "test"  
     (!) .     
""        .    
,        ,  ,  "x",   
  "x=0".
     .

     x=abc ; export x ; [ abc -eq "$x" ] ; echo $?
     "[": integer expression expected before -eq

     x=321 ; export x ; [ 321 -eq "$x" ] ; echo $?
     0

     x=3.21 ; export x ; [ 3.21 -eq "$x" ] ; echo $?
     "[": integer expression expected before -eq

     x=321 ; export x ; [ 123 -lt "$x" ] ; echo $?
     0

      :
          :
     !   -  (not)     .
     -o  -  (or)   "".
     -a  -  (and)   "".
     .    .

     .

      [ ! privet ] ; echo $?
      1

     x=privet; export x; [ "$x" -a -f specific ] ; echo $?
     0

     x="";export x; [ "$x" -a -f specific ] ; echo $?
     1

     x="";export x; [ "$x" -a -f specific -o privet ] ; echo $?
     0

     x="";export x; [ "$x" -a -f specific -o ! privet ] ; echo $?
     1

     .    .


		5.2.   "if"

        "if"  

    if  
      then  
	 [elif  
	  then  ]
      [else  ]
    fi

       "elif"       "else if"  
         ,   ..     
      "if" (   ).
  ""          
   .
     

     [elif  
      then  ]

     [else  ]

          (     
      - 
     "test"!).
         

    if   
      then  
    fi

           (       
 "0",   "",   .
       ,       
    "fi".    "fi", ,  
  "if".

     .
        "if-1"

     if [ $1 -gt $2 ]
	then pwd
	else echo $0 : Hello!
     fi

       

     if-1 12 11



     /home/sae/STUDY/SHELL


     if-1 12 13



     if-1 : Hello!

                 shell, 
       .  
   .   "if-2" 

     if a=`expr "$1" : "$2"`
	then echo then a=$a code=$?
	else echo else a=$a code=$?
     fi

 

     if-2  by by



     then a=2 code=0



     if-2  by be



     else a=0 code=1


        

     ###
     # if-3:  

     echo -n "      ?: "
     read z
     if [ $z = 5 ]
	then echo   !
	elif [ $z = 4 ]
	     then echo     !
	     elif [ $z = 3 ]
		  then echo    !
		  elif [ $z = 2 ]
		       then echo   !
		       else echo   !
     fi

           ,   
      ,      
.


	       5.3.   ("case")

       "case"  :

     case     in
	)   ;;
	)   ;;
	    ...
     esac

       "case" "in"  "esac" -  . "" (
        )      "". 
  "  "  .  
      "esac",          
.
     .

     ###
     # case-1:  "case".
     #             
     #          "if"   
     #            
     #           "case".

     echo -n "      ?: "
     read z
     case $z in
	5) echo  !            ;;
	4) echo    !  ;;
	3) echo   !          ;;
	2) echo  !                ;;
	*) echo  !                   ;;
     esac

             ";;",  
  ";"      .     
    .        
  ,    ";"    
.
                 "*",  
   "case"      "   ".     
,           
(  $z)       , 
 ")".     .

     ###
     # case-2:  .
     #               
     #           ,    

     case $1 in
	     ONE|TWO|THREE) echo : ZERO    ;;
		   MMM|WWW) echo : Not-Net ;;
	 Hi|Hello|Howdoing) echo : ! ;;
			 *) echo     ;;
     esac

       "case-2 Hello"    :

     : !

        "case-2 HELLO"    :

       

         "case"   "",   
      ,            
  .

     ###
     # case-3:      "case"

     echo " ,   ( )
      ,  
     :
	    1 - 
	    2 -   
	    3 -     "
     read x y  # x -  , y -  
     case $y in
	1) sort   < $x               ;;
	2) cat    < $x               ;;
	3) wc -l  < $x               ;;
	*) echo "
		     
		     ! " ;;
     esac

     ,             
        
  .
         "case-4",      
,        (   ), 
  ,  ( 2 )  , 
   :

     ###
     # case-4:   .
     #           .
     # "$#" -      
     # ">>" -      

     case $# in
	  1) cat >> $1                           ;;
	  2) cat >> $2 < $1                      ;;
	  *) echo ": case-4 [] " ;;
     esac

     "$1"  (  "$#=1")  -     ,   
   .
     "$1"    "$2"  (  $#=2)  -    ,  
("$1")    ("$2") .
           (*)    , 
    .


	  5.4.     ("for")

      "for"  :

    for  [in  ]
	do
	     
	done

       "for"  -     , "do" 
"done" -  ,   .   
"done"!  "in  "  .

       "lsort"   

     for i in f1 f2 f3
     do
       proc-sort $i
     done

          "i"    .  
   shell-,  
       (i=f1,  i=f2,  i=f3),  
    "procsort".
         "for i in *",  " 
  ".
       "proc-sort"       


   cat $1 | sort | tee /dev/lp > ${1}_sorted

     ..    , 
    ("/dev/lp")    

   f1_sorted  f2_sorted    f3_sorted

            "lsort",  
     ,   
  .
         :

   for i
       do
	 proc-sort $i
       done

              "i"      "in"  
         ,    
  .     ,


   lsort f1 f2 f3

                 (  
"case-2")      .     
         .      
      "for"    "in    ",
     .

     ###
     # holding: .
     #               
     #           ,    
     for i
	 do
	     case $i in
			 ONE|TWO|THREE) echo : ZERO    ;;
			       MMM|WWW) echo : Not-Net ;;
		     Hi|Hello|Howdoing) echo : ! ;;
				     *) echo     ;;
	     esac
	 done


       "holding Hello HELLO ONE"   :

     : !
       
     : Not-Net

      .

     ###
     # subdir:    
     #            $dir

	     for i in $dir/*
	     do
		if [ -d  $i ]
		   then echo $i
		fi
	     done

           ,       
,         
.  "i"    : 1, 2, 3, 4, 5,
          
           .    
  "i"    ,       ,  
              
    .

     ###
     # print-5:    

     for i in 1 2 3 4 5
	do
	   cat file-22 > /dev/lp
	done

       "print-n"     
         "for".  ,    "for  i  ...",
  "in ..."   , ..    "i"
      ,      
   .

     ###
     # print-n:   
     #           

     for i
	  do
		  cat file-22 > /dev/lp
	  done

       ,      

	for i in $*

       "$*" -    .

               "$*"   "$@",
        .      
,  ,  ,   .
        "cmp"  :

     for i in "$*"
       do
	   echo $i
       done
     echo
     for i in "$@"
	do
	   echo $i
	done

 

     cmp aa bb cc

   

     aa bb cc

     aa
     bb
     cc


	5.4.      ("while")

      "while",    ,
  ,       
                
   .

      "while"  :

    while 
	do
	     
	done

       "while"  -          
  .           ( "do" 
"done")        ,     
 (..        
"0")            
("break", "continue"  "exit").      
 .

     ###
     # print-50:  "while"
     #              50
     #             "file-22"
     n=0
     while [ $n -lt 50 ]    #  n < 50
     do
	n=`expr $n + 1`
	cat file-22 > /dev/lp
     done

              ,      "n"  
    0,      ,   
"expr"      shell-    ,  
  .

     n=`expr $n + 1`

     ..     "n"   1.

             ,         
.    "r-br"      
        "break",    
 .

     ###
     # r-br:  "while" c "break"
     #           50
     #          "file-22"
     n=0
     while true
     do
	if [ $n -lt 50 ]           #  n < 50
	   then n=`expr $n + 1`
	   else break
	fi
	     cat file-22 > /dev/lp
     done

       "break  [n]"     .  "n"
,      "break 1". "n"  
  ,      , , "break 3" -
    .
             "break"  "continue [n]" 
             
.       . , "continue 2"
          (     )
 .
       "exit  [n]"        
    "0"    "n"  (    "n" ). 
       .   
           ,
   ()    .


	   5.5.      ("until")

      "until"  :

    until 
	do
	     
	done

       "until"  -          
 .      ( "do"  "done")
      ,      
          ("break",
"continue"  "exit").        
.
           "while"     ,  
        (      
      )    ( 
  !)    .
     ,        "until"    
       .
     .

     until false
     do
	 read x
	 if   [ $x = 5 ]
	   then echo enough ; break
	   else echo some more
	 fi
     done

                    
(        "some more"),    
"5".      "enough"   "break" 
 .
         (" ")  
   .

     until date | grep 12:00:
     do
	 sleep 30
     done

       30     .
  "date"          .   "grep"
            
   "12:00:"  ,   "date".
  "grep"    "1",  
 "",   " "   30 ,
     .   ( 
   )    ,    
,  "grep"        
 .


		  5.6.  

        

     :

       .   "0".
,   "while :"     
,      ,            
   "csh".


		  5.7.   shell

                shell  
 .

        :

     ()
     {
      
     }

                 . 
      .  
   .    
  ;      -    .
        "return [n]", 
() "n" -  .
     .            "fun"

     echo $$

     fn()                 #  
     {
     echo xx=$xx
     echo $#
     echo $0: $$ $1 $2
     xx=yy ; echo xx=$xx
     return 5
     }

     xx=xx ; echo xx=$xx
     fn a b               #   "fn"  
     echo $?
     echo xx=$xx

     "fn",   :

     749
     xx=xx
     xx=xx
     2
     fun: 749 a b
     xx=yy
     5
     xx=yy


		5.8.   ("trap")

                    
.
                   
,  :
     0  -   ,
     1  -  (  ),
     2  -   <Del>,
     9  -  ( ),
     15 -  .

            "trap", 
:

     trap ' ' 

         ,   
      "",      " ",
    (            
"exit")            
  .

     ,       
         "/tmp", 
     "trap":

    tarp 'rm /tmp/* ; exit 1' 1 2 15

             . , 
          "exit"  
.
       "trap"      ,
  "  "  .   ,   "cmd"
    ,        
,               
,     :

     ( trap '' 1; cmd )&


			    * * *

       shell    , 
      :-)     
  ,   .  ,   
      (         ')  
.
             ( 
)    .
                 shell
    [ 9, 1, 10, 11 ].


		       6. 

1.    .     UNIX. -
  .:   , 1985. -318 .
2.    .     UNIX.
  -.:   , 1985. -232 .
3.    .     UNIX.
  -.: , 1987. -287 .
4.    .,  .  UNIX. 
   . -.:   , 1986. -352 .
5.    .,  .     UNIX.
  -.:   , 1986. -341 .
6.    ..,  ..   UNIX:
    . -.:  
  , 1988. -206 .
7.    .   UNIX. -.: , 1986. -462 .
8.    ..  .   
   . -.:   , 1985 -231 .
9.    .,  ..   . -.: , 1988.
  -392 .
10.   ..,  ..,  ..  -
   . -.:   , 1991 -208 .
11.   ..,  . UNIX -    -
  . -.:   , 1992 -304 .

